// 引入axios
import axios from 'axios'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { Notification } from 'element-ui';
import router from '.././router'
// import Vue from 'vue'
import { request } from '@/utils/config'
// 请求拦截器
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.interceptors.request.use(config => {
  const configHeaders = {
    'Authorization': `Bearer ${getToken()}`,
  }
  Object.assign(config.headers, configHeaders);
  return config
}, error => {
  // Do something with request error
  console.log(error) // for debug
  Promise.reject(error)
})

// 响应拦截器即异常处理
axios.interceptors.response.use(response => {
  return response
  // const res = response.data.Data.StatusCode;
  // if (res == 400 || res == 403 || res == 405) {
  //   Toast("token已失效，正在重新登录");
  //   setTimeout(() => {
  //     router.push('/login');
  //   }, 2000);
  // }
}, err => {
  if (err && err.response) {
    switch (err.response.status) {
      case 400:
        err.message = '错误请求'
        break
      case 401:
        err.message = '未授权，请重新登录'
        break
      case 403:
        err.message = '拒绝访问'
        break
      case 404:
        err.message = '请求错误,未找到该资源'
        break
      case 405:
        err.message = '请求方法未允许'
        break
      case 408:
        err.message = '请求超时'
        break
      case 500:
        err.message = '服务器端出错'
        break
      case 501:
        err.message = '网络未实现'
        break
      case 502:
        err.message = '网络错误'
        break
      case 503:
        err.message = '服务不可用'
        break
      case 504:
        err.message = '网络超时'
        break
      case 505:
        err.message = 'http版本不支持该请求'
        break
      default:
        err.message = `连接错误${err.response.status}`
    }
    return Promise.reject(error)
  }
})

axios.defaults.baseURL = request.baseURL + '/api/'
// 设置默认请求头
axios.defaults.headers = {
  'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 50000

export default {
  // get请求
  get(url, param) {
    return axios.get(url, {
      params: param
    }).then((res) => {
      if (res || res.data) {
        let code = res.data.StatusCode
        if (code === 200) {
          return Promise.resolve(res.data)
        } else if (code === 500) {
          Notification({
            title: '错误',
            message: res.data.Data,
            type: 'error'
          })
        } else if (code === 403 || code === 405) {
          Notification({
            title: '错误',
            message: res.data.Data,
            type: 'error',
            duration: 1500
          })
          setTimeout(() => { router.push({ path: '/login' }) }, 1500);
        }
      } else {
        alert('系统错误');
      }
    })
  },
  getEx(url, param) {
    return axios.get(url, {
      params: param
    }).then((res) => {
      return Promise.resolve(res.data)
    })
  },
  // post请求
  post(url, param) {
    return axios.post(url, param).then((res) => {
      if (res || res.data) {
        let code = res.data.StatusCode
        if (code === 200) {
          return Promise.resolve(res.data)
        } else if (code === 500) {
          Notification({
            title: '错误',
            message: res.data.Data,
            type: 'error'
          })
        } else if (code === 403 || code === 405) {
          Notification({
            title: '错误',
            message: res.data.Data,
            type: 'error',
            duration: 1500
          })
          setTimeout(() => { router.push({ path: '/login' }) }, 1500);
        }
      } else {
        alert('系统错误');
      }
    })
  },
  // xxx
  // post请求
  postByLogin(url, param) {
    return axios.post(url, param).then((res) => {
      return Promise.resolve(res.data)
   })
  }
}
